<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>对象</title>
</head>
<body>
    <!-- 对象 ：是一组无序的相关 属性 和 方法 的集合，所有的实物都是对象，列如字符串，数值，数组，函数等 -->
          <!-- 属性 事物的特征，在对象中用 属性 来表示，（常用名词）  就是有什么特征
               方法 事物的行为，再对象中用 方法 来表示  （常用动词）  就是可以做什么事  -->
        <!-- 为什么需要对象: 保存一个值时，可以使用变量，保存多个值（一组值）时， 可以使用数组， 如果保存一个人的完整信息呢？
         js中的对象表达结构更清晰，更强大， -->

         <!-- 创建对象的三种方法 
                               1  利用字面量创建对象   最常用
                                      对象字面量 ： 就是用 花括号｛｝里面包含了表达这个具体事物（对象） 的属性和方法 -->
                                            <!-- <script> 
                                                // 利用字面量创建对象｛｝
                                                // var obj = {};  //创建了有一个空的对象
                                                // var obj = {
                                                //     uname: '赵哲',
                                                //     age:25,
                                                //     sex:'男',
                                                //     sayHi: function(){
                                                //         console.log('hi~');
                                                //     }
                                                // }
                                                //  (1) 里面的属性或者方法 我，们采取 键值对的形式 键 属性名： 值 属性值
                                                //  (2) 多个属性或者方法中间用逗号隔开的
                                                //  (3) 方法后面跟的是一个 匿名函数 

                                                // 使用对象
                                                    // (1)  调用对象的属性 我们采取 对象名.属性名   .理解为的
                                                    console.log(obj.uname);
                                                    // (2)  调用对象属性还有一种方法  对象名['属性名']
                                                    console.log(obj['age']);
                                                    // (3)  调用对象的方法  sayhi  对象名.方法名()  千万别忘记添加（）
                                                    obj.sayHi();

                                            </script>
                               <!-- 2  利用 new Object 创建对象 -->
                               <!-- <script>
                                   var obj = new Object(); // 创建了一个空的对象
                                   obj.uname = '赵哲';
                                   obj.age = 25;
                                   obj.sex = '男';
                                   obj.sayHi = function(){ // 创建方法
                                     console.log('hi~');
                                   }
                                   // 1 是利用 =  等号赋值的方法， 调价对象的 属性和方法
                                   // 2 每个属性方法之间用分号结束
                                   console.log(obj.age);
                                   console.log(obj.sex);
                                   obj.sayHi()
                               </script> -->

                               <!-- 3  利用 构造函数创建对象 -->
                               <script>
                                   // 因为前面两种创建方式一次只能创建一个对象
                                 //里面的属性和方法是大量相同的，因此可以使用函数的方法 重复这些相同的代码， 我们就把这个函数称为 构造函数
                                //  又因为这个函数 不一样， 里面封装的不是普通的代码 而是 对象
                                //  构造函数 就是把我们对象里面一些相同的属性和方法抽象出来 封装到函数里面

                                // 我们创建四大天王的 对象   相同的属性 名字 年龄 性别  相同的方法  唱歌
                                // function 构造函数名(){
                                //     this.属性 = 值;
                                //     this.方法 = function(){}
                                // }
                                // new 构造函数名(); // 使用函数
                                function Star(uname,age,sex){  
                                    this.name = uname;
                                    this.age = age;
                                    this.sex = sex;
                                    this.sing = function(sang){
                                        console.log(sang);
                                    }
                                }
                             var ldh = new Star('刘德华',18, '男');  // 调用函数返回的是一个对象
                             console.log(ldh.name);
                             console.log(ldh['sex']);
                             ldh.sing('冰雨');
                                //  构造函数 首字母要大写
                                // 我们构造函数不需要 return 就可以返回结果
                                //  我们调用 构造函数 必须使用new
                                //  我们只要 new Star() 调用函数 就创建了一个 对象 ldh ｛｝
                                // 我们属性和方法前面必须添加 this
                               </script>


                               <!-- new关键字执行过程 -->
                               <!-- new 构造函数可以在内存中创建了一个空的对象
                                    this就会指向刚才创建的空的对象
                                    执行构造函数里面的代码 给这个空对象添加属性和方法
                                    返回这个对象
                            -->

                            <!-- 遍历对象  就用for in 循环 -->
                            <!-- for...in循环         
                                 for(变量 in 对象){

                                 }
                            -->
                            <script>
                                var obj1 = {
                                    name : 'zhoazhe',
                                    age : 25,
                                    sex : 'nan'
                                }
                                // console.log(obj1.name);
                                // console.log(obj1.age);
                                for (var k in obj1){
                                    console.log(k); //k 变量 输出 得到的是属性名
                                    console.log(obj1[k]); //  obj1[k]  得到的是属性值
                                }
                                // 我们使用for in 里面的变量 我们喜欢写 k 或者 key
                            </script>
    

</body>
</html>